package futbol.tacticas.concursantes2007.DaniCampeon;

import futbol.tacticas.concursantes.Tactica;

import java.awt.Color;
import java.util.Vector;

import futbol.tacticas.Comando;
import futbol.tacticas.SituacionJugadores;

/**
 * Esta clase implementa la "TacticaDani", as como las funciones 
 * necesarias para su ejecucin.
 * 
 * Esta clase se encarga de gestionar la tctica del equipo DANI.
 * 
 * Se basa en el uso de varias tcticas de manera que se puedan aplicar
 * de manera dinmica durante en transcurso de la partida.
 * @author Daniel Peired
 */
public class Dani_Campeon extends TacticaDaniI implements Tactica
{

  //---------------------------------------------//
  // ATRIBUTOS
  //---------------------------------------------//
	
  //---------------------------------------------//
	/*
	 * Definicin de las Tcticas
	 */
  private TacticaDaniN tacticaNormal;
// TODO: Implementar las tcticas adecuadas  
private TacticaDaniA tacticaAtaque;
private TacticaDaniD tacticaDefensa;
  
  /*
   * Tctica Actual
   */
  private TacticaDaniI tacticaActual;

    
  //---------------------------------------------//
	// CONSTRUCTOR
  //---------------------------------------------//
	
  //---------------------------------------------//
	/*
	 * CONSTRUCTOR
	 */
  public Dani_Campeon()
  {
    super();
    
    this.tacticaNormal = new TacticaDaniN();
    this.tacticaDefensa= new TacticaDaniD();
    this.tacticaAtaque = new TacticaDaniA();

    this.tacticaActual = this.tacticaNormal;
    this.cambioTacticaLastTactica = CHECK_TACTICA_NORMAL;
// debug    
//this.tacticaActual = this.tacticaDefensa;
//this.cambioTacticaLastTactica = CHECK_TACTICA_DEFENSA;
//this.tacticaActual = this.tacticaAtaque;
//this.cambioTacticaLastTactica = CHECK_TACTICA_ATAQUE;
    this.cambioTacticaNextCheckJugada = 600;
    this.cambioTacticaLastJugada = 0;
    this.cambioTacticaLastTanteoGanando = 0;

// Debug
//Comando.DEBUG_SHOW_COMMANDS = false;
//TacticaDaniInfo.SHOW_TURN_TIME = false;
//TacticaDaniInfo.SHOW_CHUTE_INFO = true;
//TacticaDaniInfo.SHOW_GOL_INFO = true;
//TacticaDaniInfo.SHOW_COMANDOS_INFO = true;

//TacticaDaniI.DEBUG_MOVE_POR = true;  
//TacticaDaniInfo.DEBUG_MOVE_DEF = true;
//TacticaDaniInfo.DEBUG_MOVE_MED = true;
//TacticaDaniInfo.DEBUG_MOVE_DEL = true;
//TacticaDaniInfo.DEBUG_MOVE_ACHIQUE = true;
//TacticaDaniInfo.DEBUG_BOLA_PASE = true;
//TacticaDaniI.DEBUG_BOLA_TIRO = true;
//
//TacticaDaniI.DEBUG = true;  
  }
    
  //---------------------------------------------//
  // MTODOS DE LA INTERFAZ
  //---------------------------------------------//
  
  //------------------------------------------------------//
  public String getNombre()
  {
    return "Dani_Campeon";
  }
  
  //------------------------------------------------------//
  public Color getColor1()
  {
    return new Color(155, 0, 155);
  }
  
  //------------------------------------------------------//
  public Color getColor2()
  {
    return new Color(125, 0, 125);
  }
  
  //------------------------------------------------------//
  public Color getColorNumero()
  {
    return Color.yellow;
  }
  
  //------------------------------------------------------//
  public int getFuerza(int n)
  {
    return this.tacticaActual.getFuerzaJugadores(n);
  }
  
  //------------------------------------------------------//
  /**
   * Devuelve la coordenada inicial X de los jugadores.
   */
  public int getXInicial(int n)
  {
    return this.tacticaActual.getXInicial(n);
  }
  
  //------------------------------------------------------//
  /**
   * Devuelve la coordenada inicial Y de los jugadores.
   */
  public int getYInicial(int n)
  {
    return this.tacticaActual.getYInicial(n);
  }
  
  //------------------------------------------------------//
  /**
   * Mtodo Principal de la Tctica
   */
  public Vector<Comando> getComandos(SituacionJugadores sj)
  {
long iniTime = System.currentTimeMillis();
    
    //---------------------------//
    // Aadir Eurstica sobre el Resultado y Tiempo de partido //
    //---------------------------//
    int tactica = checkPartido(sj);
    TacticaDaniI oldTactica =  this.tacticaActual;
    if (tactica == CHECK_TACTICA_NORMAL)
      this.tacticaActual = this.tacticaNormal;
    else if (tactica == CHECK_TACTICA_DEFENSA)
      this.tacticaActual = this.tacticaDefensa;
    else if (tactica == CHECK_TACTICA_ATAQUE)
      this.tacticaActual = this.tacticaAtaque;
    if (oldTactica != this.tacticaActual)
    {
if (DEBUG)
  this.printInfoPartido("TACTICA CAMBIADA : NEW = "+this.tacticaActual.getNombre()+"\t  OLD = "+oldTactica.getNombre());
    }
    
    
    Vector<Comando> comandos = new Vector<Comando>();

    comandos = this.tacticaActual.gCs(this.numJugada, sj);

if (SHOW_TURN_TIME)
  printInfoPartido("Tiempo de Turno = "+(System.currentTimeMillis()-iniTime));

    return comandos;
  }
  
  //---------------------------------------------//
  // MTODOS AUXILIARES
  //---------------------------------------------//
  
  
} // Class Tactica Dani
